package com.kerrykidz.parreserve.service;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

import com.kerrykidz.dao.model.LocPartyInoutEntity;
import com.kerrykidz.membership.dao.model.CusMemEntity;
import com.kerrykidz.parreserve.dao.model.GblParCWricorEntity;
import com.kerrykidz.parreserve.dao.model.ParCTypeEntity;
import com.kerrykidz.parreserve.dao.model.ParReserveEntity;
import com.kerrykidz.parreserve.dao.model.ParReserveRoomEntity;
import com.kerrykidz.parreserve.dao.model.ParRoomEntity;
import com.kerrykidz.promotion.dao.model.ProCampaignEntity;
import com.kerrykidz.sales.dao.model.PosOrderEntity;
import com.kerrykidz.sales.dao.model.PosOrderPrdEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdPriceEntity;
import com.kerrykidz.system.dao.model.GblSecBranEntity;
import com.kerrykidz.system.dao.model.SecUsrEntity;
import com.kerrykidz.system.dao.model.SysBarCodeEntity;
import com.rdp.framework.core.model.MyBatisSuperModel;
import com.rdp.framework.exception.RDPException;


public interface IParReserveService {

	/**
	 * @Description  查询房间列表
	 * @return ParRoomEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	List<ParRoomEntity> findParRoom(String branId);
	
	/**
	 * @Description  倒序查询房间list
	 * @return 
	 * @author 
	 * @date 2014年8月26日 
	 */
	List<ParRoomEntity> findParRoomOrderby();
	
	/**
	 * @Description  添加 房间，预约 关系表数据
	 * @return ParRoomEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	int  insertPReserveRoom(ParReserveRoomEntity parReserveRoom);
	
	/**
	 * @Description  根据预约编号 删除 房间，预约 关系表数据
	 * @return ParRoomEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	int  deleteParRoomByParId(String pkParresId);
	
	/**
	 * @Description    删除 房间，预约 关系表数据
	 * @return ParRoomEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	int  deleteParRoom(ParReserveRoomEntity parReserveRoom);
	/**
	 * @Description 派对主食套餐列表 findParReserveTaocan
	 * @return GblScmPrdEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	List<GblScmPrdEntity> findParReserveTaocan(GblScmPrdEntity parReserve);
	
	/**
	 * @Description 派对附加单点菜单列表 findParReserveDandian
	 * @return GblScmPrdEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	List<GblScmPrdEntity> findParReserveDandian(GblScmPrdEntity parReserve);
	
	/**
	 * @Description 派对装饰物列表 findParReserveTrimming
	 * @return GblScmPrdEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	List<GblScmPrdEntity> findParReserveTrimming(GblScmPrdEntity parReserve);
	/**
	 * @Description  新增预约
	 * @return ParRoomEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	int  insertParReserve(ParReserveEntity parReserveEntity);
	
	/**
	 * @Description  修改预约
	 * @return ParRoomEntity
	 * @author chenyu
	 * @date 2014年8月6日 
	 */
	int  updateParReserve(ParReserveEntity parReserveEntity);
	
	/**
	 * 根据套餐分类id 查询派对主食套餐列表 findParReserveTaocan
	 * @return GblScmPrdEntity
	 * @author chenyu
	 * @date 2014年8月8日 
	 */
	public List<GblScmPrdEntity> findParReserveTaocanByCateId(GblScmPrdEntity entity) throws RDPException;
	
	/**
	* @Title:  根据商品id 的list 获取团体预约获取 主食，附加菜单，装饰物列表  findScmRrdByprdIdList  
	* @Description: <p> 团体预约获取 主食，附加菜单，装饰物列表<p>
	* @date: 2014年8月11日
	* @return: List<GblScmPrdEntity>
	* @throws 
	*
	 */
	List<GblScmPrdEntity> findScmRrdByprdIdList(Map<String,Object> map);
	
	/**
	* @Title:  根据商品id 的list 获取团体预约获取 主食，附加菜单，装饰物分页列表  findScmRrdByprdIdListPage  
	* @Description: <p> 团体预约获取 主食，附加菜单，装饰物列表<p>
	* @date: 2014年8月11日
	* @return: List<GblScmPrdEntity>
	* @throws 
	*
	 */
	List<GblScmPrdEntity> findScmRrdByprdIdListPage(GblScmPrdEntity scmPrd);
	
	
	/**
	 * @Description   根据预约编号，查询 预约数据
	 * ParReserveEntity
	 * @author chenyu
	 * 2014年8月14日 下午4:00:43
	 */
	ParReserveEntity  findParReserveById(String pkParresId);
	
	/**
		 * @Description   根据预约编号，查询 预约的房间
		 * ParReserveRoomEntity
		 * @author chenyu
		 * 2014年8月14日 下午4:00:43
	 */
	public List<ParReserveRoomEntity> findParReserveRoomByparId(String pkParresId);
	/**
	* @Title:  查询 预约房间列表，在 档案管理 --》预约管理 分页 列表中显示  
	* @Description: <p>查询 预约房间列表，在 分页 列表中显示    <p>
	* @date: 2014年8月11日
	* @return: List<ParReserveEntity>
	* @throws 
	 */
	public List<ParReserveEntity> parReservePageListManages(ParReserveEntity parReserve);
	
	/**
	* @Title:  查询 预约房间列表，在 日历控件 模式中显示  
	* @Description: <p>查询 预约房间列表，在 日历控件 模式中显示  <p>
	* @date: 2014年8月11日
	* @return: List<ParReserveEntity>
	* @throws 
	 */
	public List<ParReserveEntity> findParReserveRooMListView(ParReserveEntity parReserve);
	
	/**
	 * 
		 * @Description 查询 预约房间时间，在 日历控件 模式中  的 上一条，下一条 按钮 中 传参使用   
		 * List<String>
		 * @author chenyu
		 * 2014年8月22日 上午9:47:53
	 */
	public List<String> findParReserveDateRooM(ParReserveEntity parReserveEntity);
	
	/**
	 * 预付前， * 根据 订单id，门店编号。查找订单商品详细列表
		 * @Description   
		 * PosOrderPrdEntity
		 * @author chenyu
		 * 2014年8月12日 下午2:56:13
	 */
	public List<PosOrderPrdEntity> pageOrderPrdListByOrdId(String fkBranId,String pkOrderId);
	
	/**根据 订单id，商品id 。查找订单商品详细 
	 * 
		 * @Description   
		 * PosOrderPrdEntity
		 * @author chenyu
		 * 2014年10月26日 下午4:20:58
	 */
	public PosOrderPrdEntity orderPrdByOrdIdAndPrdId(String pkOrderId,String fkPrdId);	
	
	/**
	* @Title:  根据商品编号，查询该商品的定价信息 
	* @Description: <p>  根据商品编号，查询该商品的定价信息<p>
	* @date: 2014年8月8日
	* @return: List<GblScmPrdPriceEntity>
	* @throws 
	*
	 */
	public List<GblScmPrdPriceEntity> findPrdPriceByPrdId(GblScmPrdPriceEntity prdPrice);
	
	/**
	* @Title:  根据商品编号，查询该商品的定价信息 
	* @Description: <p>  根据商品编号，查询该商品的定价信息<p>
	* @date: 2014年8月8日
	* @return: List<GblScmPrdPriceEntity>
	* @throws 
	*
	 */
	public double findPrdPriceByPrdId(String prdId);
	
	/**
	 * 根据姓名或电话号码查询会员
	 * @return
	 * @throws RDPException
	 * @throws UnsupportedEncodingException 
	 */
	public List<CusMemEntity> findMemberByNameOrTel(CusMemEntity cusMem) throws RDPException;
	
	

	/**
	 * 根据会员id查询会员信息
	 * 
	 * @param pkMemId
	 *            会员id
	 * @return
	 * @throws RDPException
	 */
	public  CusMemEntity findMemberById(String pkMemId)  ;
	
	/**
	 * 
	 * @Description  根据状态和门店获取派对或团体信息
	 * @param branId
	 * @param resStatus
	 * @param grpFlag
	 * @return
	 * @author QUINN
	 * @date 2014年8月19日下午3:32:54
	 */
	public List<ParReserveEntity> findParReserve(String branId,String resStatus,String grpFlag);
	
	/**
	 * 根据房间编号，时间，查找是否 房间已经占用
	 * @param ParReserveEntity
	 * 	 
	 * @return List<ParReserveEntity>
	 * @throws RDPException
	 */
	List<ParReserveEntity> findAlreadyRoomList(ParReserveEntity parReserve);
	
	/**
	 * 初始化 派对预约详细页面 的 下拉框 活动类型  list值 
	 * @param ParCTypeEntity
	 * 	 
	 * @return List<ParCTypeEntity>
	 * @throws RDPException
	 */
	public List<ParCTypeEntity>  findParCtypeList();
	
	/**
	 * 
	 * @Description 根据派对id查询订单
	 * @param parresId
	 * @return
	 * @author chenyu
	 * @date 2014年8月23日 
	 */
	List<PosOrderEntity> findPosOrderByParresId(String parresId);
	

	/**
	 *   查询有效的 腕带颜色列表
		 * @Description   
		 * List<GblParCWricorEntity>
		 * @author chenyu
		 * 2014年9月1日 下午4:14:27
	 */
	public List<GblParCWricorEntity> findParWricorList();
	
	/**
	 * 查找可用的 条码
	 * @param SysBarCodeEntity
	 * 	 
	 * @return List<SysBarCodeEntity>
	 * @throws RDPException
	 */
	List<SysBarCodeEntity> findSysBarCodeList(SysBarCodeEntity sysBarCode);
	
	/**
	 * 根据门店编号 ，查找可用的 条码
	 * @param SysBarCodeEntity
	 * 	 
	 * @return List<SysBarCodeEntity>
	 * @throws RDPException
	 */
	List<SysBarCodeEntity> findSysBarCodeListByBranId(SysBarCodeEntity sysBarCode);
	
	/**
	 * 新增 派对出入场表
		 * @Description   
		 * void
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public void addLocParTyInOut(LocPartyInoutEntity locPartyInout);
	
	/**
	 * 修改派对出入场表
		 * @Description   
		 * void
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public void updateLocParTyInOut(LocPartyInoutEntity locPartyInout);
	
	/**
	 * 根据派对预约编号,条形码编号 ,门店编号 查询 派对出入场表 信息 
		 * @Description   
		 *return List<LocPartyInoutEntity>
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public List<LocPartyInoutEntity> findLocParTyInOut(LocPartyInoutEntity locPartyInout);
	
	/**
	 *  查找派对在入场 表  已生成好的  条码 分页列表 （入场 扫描条形码 确认）
		 * @Description   
		 * LocPartyInoutEntity
		 * @author chenyu
		 * 2014年8月12日 下午2:56:13
	 */
	public List<LocPartyInoutEntity> localPartyInCodeList(LocPartyInoutEntity locPartyInout);
	
	/**
	 *  查找派对在入场 表  已生成好的  条码 分页列表 （入场 扫描条形码 确认）
		 * @Description   
		 * LocPartyInoutEntity
		 * @author chenyu
		 * 2014年8月12日 下午2:56:13
	 */
	public List<LocPartyInoutEntity> findLocParTyInListByPage(MyBatisSuperModel model);
	
	/**
	 * 根据派对预约编号,条形码编号 ,门店编号  删除派对出入场表 信息
		 * @Description   
		 * void
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public void deleteLocParTyInOut(LocPartyInoutEntity locPartyInout);
	
	/**
	 * 根据派对出入场编号  删除派对出入场表 信息
		 * @Description   
		 * void
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public void deleteLocParTyInOutById(LocPartyInoutEntity locPartyInout);
	
	/**
	 * 根据派对预约编号  删除派对出入场表 信息
		 * @Description   
		 * void
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public void deleteLocParTyInOutByParresId(String fkParresId);

	
	/**
	 * 根据姓名/电话/邮箱 ,入场时间 查询 派对出入场表 信息
		 * @Description   
		 * void
		 * @author YJJ
	 */
	public List<ParReserveEntity> getAllPartyInOut(MyBatisSuperModel model);
	
	/**
	 *  根据 腕带颜色id 查询有效的 腕带颜色信息
		 * @Description   
		 * GblParCWricorEntity
		 * @author chenyu
		 * 2014年9月1日 下午4:14:27
	 */
	public GblParCWricorEntity findParWricorById(String pkWricorId);
	
	/**
	 * 派对定时 每隔30分钟，自动取消大于24小时 未预付 的 派对信息。
		 * @Description   
		 * void
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public void updateParReserveAutoCancel(String dateTime);

	/**
	 * 根据预约编号，查询 入场的表的 条形码list
		 * @Description   
		 * List<LocPartyInoutEntity>
		 * @author chenyu
		 * 2014年9月15日 下午4:12:13
	 */
	public List<LocPartyInoutEntity> selectLocParTyInOutByParresId(String fkParresId);
	
	/**
	 * 派对定时 每隔10分钟，查询变更房间，显示新订单，覆盖原订单，2小时未付款，自动取消还原到原订单
		 * @Description   
		 * void
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public void updateParReserveFKCancel();
	
	/**
	 * 根据条形码，门店编号 ，查询 条形码信息
		 * @Description   
		 * List<SysBarCodeEntity>
		 * @author chenyu
		 * 2014年9月22日 下午7:50:35
	 */
	public List<SysBarCodeEntity> selectSBarCodeBrandId(SysBarCodeEntity entity);
	
	/**
	 * 根据会员id，查询会员相关信息
		 * @Description   
		 * CusMemEntity
		 * @author chenyu
		 * 2014年9月24日 下午2:23:40
	 */
	public CusMemEntity findSusMemByMemId(String memId) throws RDPException;
	
	/**
	 * 
	*
	* @Title: findMemberProduct
	* @Description: <p>查询会籍商品p>
	* <pre>
		这里描述这个方法的使用方法 – 可选
	* </pre>
	* @param: <p>@param entity
	* @param: <p>@return
	* @param: <p>@throws RDPException<p>
	* @date: 2014年8月26日
	* @return: GblScmPrdEntity
	* @throws 
	*
	 */
	public GblScmPrdEntity findMemberProduct(GblScmPrdEntity entity)throws RDPException;
	
	/**
	 * 根据会员id，查找 派对优惠券 在当年内使用次数
		 * @Description   
		 * int
		 * @author chenyu
		 * 2014年9月24日 下午3:53:43
	 */
	int getCountMemOrderByMemId(String fkMemId);
	
	/**
	 * 查询促销活动  for 派对预约
	 * @param String fkBranId
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月9日
	 */
	public List<ProCampaignEntity> getCampaignForPar(String fkBranId) throws RDPException;
	
	/**
	 *  根据 预约编号 ，修改 附加 套餐，装饰物
		 * @Description   
		 * void
		 * @author chenyu
		 * 2014年9月29日 上午10:13:03
	 */
	void updateParReservePkg(ParReserveEntity parReserveEntity);
	
	/**
	 * 查找当前有效的 假期
	 * @param 
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月22日
	 */
	public List<String> findValidHoliday()throws Exception;
	
	/**
	 * 根据 门店拼音首字母缩写  获取门店信息
		 * @Description   
		 * GblSecBranEntity
		 * @author chenyu
		 * 2014年10月10日 上午11:29:30
	 */
	public GblSecBranEntity selectBranByAbbrCode(String abbrCode);
	
	/**
	 * @Description  根据房间Id，查询房间有效的时间段 
	 * @return 
	 * @author 
	 * @date 2014年8月26日 
	 */
	List<String> getRoomTime(Map<String, Object> map);
	
	/**
	 *  查询 预付后或超时未预付（2小时）列表     后面做自动解锁
		 * @Description   
		 * List<ParReserveRoomEntity>
		 * @author chenyu
		 * 2014年10月17日 下午4:19:35
	 */
	List<ParReserveRoomEntity> parResRoomCancelLocalFlag();
	
	int updateParReserveRoom(ParReserveRoomEntity parReserveRoom); 
	
	/**
	 * 根据 角色id，获取所有相关角色的用户列表 
		 * @Description   
		 * List<SecUsrEntity>
		 * @author chenyu
		 * 2014年8月22日 下午2:17:55
	 */
	public List<SecUsrEntity> listUserByRoleId(String roleId,String fkBrandId);
	
	/**
	 * 根据会员姓名查询会员
	 */
	public CusMemEntity findMemberByMemName(String memName) throws RDPException;
	
	/**
	 * 验证该日期的时间段是否已被预约过
	 * 
	 * @Description int 2014年11月17日 下午3:53:43
	 */
	public Integer getCountByDateTime(String pkParresId, String date,  String time);
	
	/**
	 * 验证该日期的时间段是否已被预约过
	 * 
	 * @Description int 2014年11月17日 下午3:53:43
	 */
	public List<ParReserveEntity> getParReserveByDateTime(String pkParresId, String date,  String time);
	
	/**导出供应商模版
	 * 
		 * @Description   
		 * String
		 * @author chenyu
		 * 2014年11月25日 下午1:57:47
	 */
	public String expParSupplyPrd(List<?> list,List<String> listSheetNames);
	
	/**
	 * 根据预约时间，查询已用过的条码颜色
		 * @Description   
		 *return List<String>
		 * @author chenyu
		 * 2014年8月30日 下午11:55:37
	 */
	public List<String> findWristColorByresDate(Map<String, Object> map);
	
	/**
	 *根据预约时间，查询已用过的条码颜色 返回 颜色 的 实体list
		 * @Description   
		 *  List<String>
		 * @author chenyu
	 */
	public List<String> findWColByresDateList(Map<String, Object> map);
	
	
	public Integer findParReserveRoom(String pkParresId, String roomId);
}
